package com.atguigu.springbootdemo.controller;

import com.atguigu.springbootdemo.bean.Employee;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Map;

/**
 * Created by Smexy on 2022/11/15
 * @Controller的作用:
 *          ①声明当前类是控制器
 *          ②Spring的容器如果扫描到了这个注解，会自动为注解标识的类，在容器中创建一个单例对象
 *
 */
@Controller  //声明我是一个控制器
public class HelloController
{
    /*
            指定这个方法可以处理哪些请求
            url： 不加/，Spring会自动添加。
     */
    @RequestMapping(value = "/hello")
    public String handle(){
        System.out.println("收到了hello请求");
        //返回页面 success.html
        return "/success.html";
    }

    public void hi(){
        System.out.println("hi");

    }

    /*
        接收表单中的参数为例:
            如果是普通参数，只需要在处理方法的形参位置声明和参数名一摸一样的形参即可。
            页面传递的参数是没有类型的，都是文本。
     */
    @RequestMapping(value = "/abc")
    public String handle1(String username,Integer age){
        System.out.println("收到了abc请求,username： " + username + ", age: " + age);
        //返回页面 success.html
        return "/success.html";
    }

    /*
            前台发送的是json，如何收?
                需要在方法出形参位置声明一个Bean或Map。
                参数需要添加@RequestBody

     */
    @RequestMapping(value = "/emp1")
    public String handle2(@RequestBody Employee employee){

        System.out.println(employee);

        return "/success.html";
    }


    /*
            前台发送的请求是:    /a/b/c ,希望获取 b
             获取请求参数:  /a/b/c?name=jack

             如何获取Url的某一层路径的值
     */
    @ResponseBody
    @RequestMapping(value = "/a/{path}/{path1}")
    public String handle3(@PathVariable(value = "path") String p,@PathVariable(value = "path1") String p2){

        System.out.println(p + "/" + p2);

        return "success";
    }


}
